<%@page import="com.alibaba.fastjson.JSONObject" %>
<%@page import="net.jeeshop.core.front.SystemManager" %>
<%@page import="net.jeeshop.core.oss.OSSObjectSample" %>
<%@page import="net.jeeshop.core.util.ImageUtils" %>
<%@page import="net.jeeshop.services.front.systemSetting.bean.SystemSetting" %>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="org.apache.commons.fileupload.servlet.ServletFileUpload,org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper" %>
<%@ page import="org.slf4j.Logger" %>
<%@ page import="org.slf4j.LoggerFactory" %>
<%@ page import="java.io.File" %>
<%@ page import="java.io.FileInputStream" %>
<%@ page import="java.io.FileOutputStream" %>
<%@ page import="java.io.InputStream" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%@ page import="java.util.*" %>
<%-- <%@ page import="org.json.simple.*" %> --%>
<%

    /**
     * KindEditor JSP
     *
     * 本JSP程序是演示程序，建议不要直接在实际项目中使用。
     * 如果您确定直接使用本程序，使用之前请仔细确认相关安全设置。
     *
     */
    Logger logger = LoggerFactory.getLogger(OSSObjectSample.class);
    logger.error("upload_json.jsp>>>>>");
    SystemSetting systemSetting = SystemManager.systemSetting;
    //文件保存目录路径
    String savePath = pageContext.getServletContext().getRealPath("/") + "/attached/";
    //String savePath = "D:\\workspace\\myshop\\web\\attached\\";//pageContext.getServletContext().getRealPath("/") + "attached/";
    System.out.println(pageContext.getServletContext().getRealPath("/") + "/attached/");
    //文件保存目录URL
    //String saveUrl  = systemSetting.getImageRootPath()+"/attached/";//request.getContextPath() + "/attached/";
    String saveUrl  = systemSetting.getImageRootPath() +"attached/";
//    String saveUrl = "/attached/";

    //定义允许上传的文件扩展名
    HashMap<String, String> extMap = systemSetting.getExtMap();

    //最大文件大小
    long maxSize = 1000000;

    session.setAttribute("ajax_upload", 1);
    response.setContentType("text/html; charset=UTF-8");
    if (!ServletFileUpload.isMultipartContent(request)) {
        out.println(getError("请选择文件。"));
        return;
    }
    //检查目录
    File uploadDir = new File(savePath);
    if (!uploadDir.isDirectory()) {
        out.println(getError("上传目录不存在。"));
        return;
    }
    //检查目录写权限
    if (!uploadDir.canWrite()) {
        out.println(getError("上传目录没有写权限。"));
        return;
    }

    String dirName = request.getParameter("dir");
    if (dirName == null) {
        dirName = "image";
    }
    if (!extMap.containsKey(dirName)) {
        out.println(getError("目录名不正确。"));
        return;
    }
    //创建文件夹
    savePath += dirName + "/";
    saveUrl += dirName + "/";
    File saveDirFile = new File(savePath);
    if (!saveDirFile.exists()) {
        saveDirFile.mkdirs();
    }
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    String ymd = sdf.format(new Date());
    savePath += ymd + "/";
    saveUrl += ymd + "/";
    File dirFile = new File(savePath);
    if (!dirFile.exists()) {
        dirFile.mkdirs();
    }
    //Struts2 请求 包装过滤器
    MultiPartRequestWrapper wrapper = (MultiPartRequestWrapper) request;
    //获得上传的文件名
    //获得文件过滤器
    File file = wrapper.getFiles("imgFile")[0];
    String fileName = wrapper.getFileNames("imgFile")[0];//imgFile,imgFile,imgFile

    //检查扩展名
    String fileExt = fileName.substring(fileName.lastIndexOf(".") + 1).toLowerCase();
    if (!Arrays.asList(extMap.get(dirName).split(",")).contains(fileExt)) {
        out.println(getError("上传文件扩展名是不允许的扩展名。\n只允许" + extMap.get(dirName) + "格式。"));
        return;
    }
    //检查文件大小
    if (file.length() > maxSize) {
        out.println(getError("上传文件大小超过限制。"));
        return;
    }


//    //重构上传图片的名称
    SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
    String newImgName = df.format(new Date()) + "_" + new Random().nextInt(1000) + "." + fileExt;
    byte[] buffer = new byte[1024];
    //获取文件输出流
    //获取内存中当前文件输入流
    try (FileOutputStream fos = new FileOutputStream(savePath + "/" + newImgName);
         InputStream in = new FileInputStream(file)) {
        int num = 0;
        while ((num = in.read(buffer)) > 0) {
            fos.write(buffer, 0, num);
        }
    } catch (Exception e) {
        e.printStackTrace(System.err);
    }
//
//    //发送给 KE
//    JSONObject obj = new JSONObject();
//    obj.put("error", 0);
//    obj.put("url", saveUrl + "/" + newImgName);
//    ///zswz/attached/image/20111129/  image 20111129195421_593.jpg
//    out.println(obj.toJSONString());

/////////////////////////////////////////////////////////////////////////////////////////////
	if (file.isFile()) {
    String newFileName1 = null;//小图
    String newFileName2 = null;//中图
    String newFileName3 = null;//大图 ，也是原图
    synchronized(OSSObjectSample.lock){
        String newFileName0 = String.valueOf(System.currentTimeMillis());
        logger.error("newFileName0="+newFileName0);
        newFileName1 = newFileName0 + "_1";
        newFileName2 = newFileName0 + "_2";
        newFileName3 = newFileName0 + "_3." + fileExt;
    }
    logger.error("newFileName1="+newFileName1+",newFileName2="+newFileName2+",newFileName3="+newFileName3);
    String rootPath = "attached/"+dirName+ "/"+ df.format(new Date()) + "/";//云存储目录前缀

    File uploadedFile3 = new File(savePath, newImgName);
    try{

        File uploadedFile1 = new File(savePath, newFileName1+"."+fileExt);
        File uploadedFile2 = new File(savePath, newFileName2+"."+fileExt);

        ImageUtils.ratioZoom2(uploadedFile3, uploadedFile1, Double.valueOf(SystemManager.getInstance().get("product_image_1_w")));
        ImageUtils.ratioZoom2(uploadedFile3,uploadedFile2,Double.valueOf(SystemManager.getInstance().get("product_image_2_w")));

        OSSObjectSample.save(rootPath + newFileName1+"."+fileExt, uploadedFile1);
        OSSObjectSample.save(rootPath + newFileName2+"."+fileExt, uploadedFile2);
        OSSObjectSample.save(rootPath + newFileName3, uploadedFile3);
    }catch(Exception e){
        e.printStackTrace();
        logger.error("上传文件异常："+e.getMessage());
        out.println(getError("上传文件失败。"));
        return;
    }

    JSONObject obj = new JSONObject();
    obj.put("error", 0);
    obj.put("url", saveUrl + newFileName3);
    out.println(obj.toJSONString());
}
%>
<%!
    private String getError (String message) {
        JSONObject obj = new JSONObject();
        obj.put("error", 1);
        obj.put("message", message);
        return obj.toJSONString();
    }
%>
